﻿using System.Collections.Generic;
using System.Linq;

namespace KingerRobot.MexicoSailunMDC.Dao;
public static class EquipHelper
{
    private static List<PORcsEquip> s_Equips = new List<PORcsEquip>();
    private static List<PORcsEquipCuring> s_EquipCurings = new List<PORcsEquipCuring>();
    private static List<POWcsEquipLoc> s_EquipLocs = new List<POWcsEquipLoc>();
    private static List<PORcsEquipCrn> s_EquipCrn = new List<PORcsEquipCrn>();

    static EquipHelper()
    {
        s_Equips = Db.Default.RcsEquips.ToList();
        s_EquipCurings = Db.Default.RcsEquipCurings.ToList();
        s_EquipLocs = Db.Default.WcsEquipLocs.ToList();
        s_EquipCrn = Db.Default.RcsEquipCrns.ToList();
    }

    public static PORcsEquip GetEquip(long equipId)
    {
        return s_Equips.FirstOrDefault(item => item.Id == equipId);
    }

    public static PORcsEquipCuring GetCuring(long equipId)
    {
        return s_EquipCurings.FirstOrDefault(item => item.Id == equipId);
    }

    //public static PORcsEquipCuring GetCuring(long ditchId, int order)
    //{
    //    var curing = s_EquipCurings.FirstOrDefault(item => item.DitchId == ditchId && item.CuringOrder == order);
    //    if (curing == null)
    //    {
    //        throw new Exception($"缓存中未获取到{ditchId}排{order}号的硫化机记录");
    //    }
    //    return curing;
    //}

    public static long GetLocId(long equipId)
    {
        var equipLoc = s_EquipLocs.FirstOrDefault(item => item.EquipId == equipId);
        if (equipLoc == null)
        {
            throw new Exception($"缓存中未获取到设备Id为{equipId}对应的位置Id");
        }
        return equipLoc.LocId.Value;
    }

    public static string GetCrnNameByFork(long forkId)
    {
        var crnId = s_EquipCrn.Where(f => f.CrnFork1 == forkId || f.CrnFork2 == forkId).FirstOrDefault()?.Id ?? 0;

        return s_Equips.Where(f => f.Id == crnId).FirstOrDefault()?.EquipName ?? "";
    }

    public static PORcsEquipCrn GetCrnByCrnName(string crnName)
    {
        var crnEquip = s_Equips.Where(f => f.EquipName == crnName).FirstOrDefault();

        return s_EquipCrn.Where(f => f.Id == (crnEquip?.Id ?? 0)).FirstOrDefault();
    }

    public static long? GetEquipIdByLocId(long locId)
    {
        return s_EquipLocs.FirstOrDefault(item => item.LocId == locId)?.EquipId;
    }
}
